﻿using System
;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ferreteria.Clases;
using Ferreteria.Forms;
using Ferreteria.Forms.GenerarRemito;
using Ferreteria.Forms.GestionPedidos;

namespace Ferreteria.Forms
{
    public partial class frmGestionPedidos : Form
    {
        DisancoEntities context;
        Pedido pedido_seleccionado;
        //int pedido_seleccionado_id;

        decimal subtotal;
        decimal descuento;
        decimal iva;
        decimal subtotal_con_iva;
        decimal subtotal_sin_iva;

        int idventasincae;
        public frmGestionPedidos()
        {
            InitializeComponent();
            toolStrip1.Focus();
            bttnFacturarCae.Enabled = false;

            cargarPedidosPendientes();
            buscarFacturasSinCAE();

           
        }

        public void cargarPedidosPendientes()
        {
            try
            {
                context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                dgvPendientes.Rows.Clear();

                foreach (var pedido in context.Pedido)
                {
                    int i = dgvPendientes.Rows.Add();

                    dgvPendientes.Rows[i].Cells["pedido_id"].Value = pedido.ped_id;
                    dgvPendientes.Rows[i].Cells["pedido_fecha"].Value = pedido.ped_fecha;
                    dgvPendientes.Rows[i].Cells["pedido_hora"].Value = pedido.ped_fecha;
                    dgvPendientes.Rows[i].Cells["pedido_cliente"].Value = pedido.Clientes.cliente_nombre;

                    decimal monto = 0;
                    foreach (var linea in pedido.LineaPedido)
                    {
                        decimal precioBonificado = Funcion.PrecioBonificado(linea.ped_precio, linea.ped_oferta_bonif);
                        monto = monto + (precioBonificado * linea.ped_cant);
                    }

                    dgvPendientes.Rows[i].Cells["pedido_monto"].Value = monto;
                }

                pedido_seleccionado = null;

                btnDescartar.Enabled = false;
                btnEmitirFactura.Enabled = false;
                btnEditarPedido.Enabled = false;
                btnEmitirComprobante.Enabled = false;
                bttnEmitirRemito.Enabled = false;

                dgvDetalles.Rows.Clear();


                lblCliente.Text = "";
                lblCondIva.Text = "";
                lblCuit.Text = "";
                lblDireccion.Text = "";
                lblDNI.Text = "";

                numDescuento.Value = 0;
                numDescuento.Enabled = false;
                txbIVA.Text = "";
                txbSubTotal.Text = "";
                txbTotalconIva.Text = "";
                txbTotalsinIva.Text = "";
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
        }

        //public void cargarPedidosPendientes()
        //{
        //    try
        //    {
        //        context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

        //        dgvPendientes.Rows.Clear();

        //        foreach (var pedido in context.Pedido)
        //        {
        //            int i = dgvPendientes.Rows.Add();

        //            dgvPendientes.Rows[i].Cells["pedido_id"].Value = pedido.ped_id;
        //            dgvPendientes.Rows[i].Cells["pedido_fecha"].Value = pedido.ped_fecha;
        //            dgvPendientes.Rows[i].Cells["pedido_hora"].Value = pedido.ped_fecha;
        //            dgvPendientes.Rows[i].Cells["pedido_cliente"].Value = pedido.Clientes.cliente_nombre;

        //            decimal monto = 0;
        //            foreach (var linea in pedido.LineaPedido)
        //            {
        //                decimal precioBonificado = Funcion.PrecioBonificado(linea.ped_precio, linea.ped_oferta_bonif);
        //                monto = monto + (precioBonificado * linea.ped_cant);
        //            }

        //            dgvPendientes.Rows[i].Cells["pedido_monto"].Value = monto;
        //        }

        //        pedido_seleccionado = null;

        //        btnDescartar.Enabled = false;
        //        btnEmitirFactura.Enabled = false;
        //        btnEditarPedido.Enabled = false;
        //        btnEmitirComprobante.Enabled = false;
        //        bttnEmitirRemito.Enabled = false;

        //        dgvDetalles.Rows.Clear();


        //        lblCliente.Text = "";
        //        lblCondIva.Text = "";
        //        lblCuit.Text = "";
        //        lblDireccion.Text = "";
        //        lblDNI.Text = "";

        //        numDescuento.Value = 0;
        //        numDescuento.Enabled = false;
        //        txbIVA.Text = "";
        //        txbSubTotal.Text = "";
        //        txbTotalconIva.Text = "";
        //        txbTotalsinIva.Text = "";
        //    }
        //    catch (Exception error)
        //    {
        //        MessageBox.Show(error.ToString());
        //    }
        //}

        private void cargarPedidoSeleccionado(int id_del_pedido)
        {
            try
            {
                //pedido_seleccionado_id = id_del_pedido;                
                pedido_seleccionado = context.Pedido.FirstOrDefault(p => p.ped_id == id_del_pedido);

                restaurarColoresGrilla();

                //Resalto el pedido seleccionado
                dgvPendientes.CurrentRow.DefaultCellStyle.BackColor = Color.Green;
                dgvPendientes.CurrentRow.DefaultCellStyle.SelectionBackColor = Color.DarkGreen;
                                
                lblCliente.Text = pedido_seleccionado.Clientes.cliente_nombre;
                lblDireccion.Text = pedido_seleccionado.Clientes.cliente_direccion;
                lblCuit.Text = pedido_seleccionado.Clientes.cliente_cuit;
                lblDNI.Text = pedido_seleccionado.Clientes.cliente_nro_doc;
                lblCondIva.Text = pedido_seleccionado.Clientes.CondicionIVA.condicion_sigla;

                dgvDetalles.Rows.Clear();

                subtotal = 0;                

                foreach (var lineaPrev in pedido_seleccionado.LineaPedido)
                {
                    int i = dgvDetalles.Rows.Add();

                    decimal precio_bonificado = Funcion.PrecioBonificado(lineaPrev.ped_precio, lineaPrev.ped_oferta_bonif);
                    decimal precio_total = precio_bonificado * lineaPrev.ped_cant;

                    dgvDetalles.Rows[i].Cells["art_id"].Value = lineaPrev.art_id;
                    dgvDetalles.Rows[i].Cells["art_nombre"].Value = lineaPrev.Articulos.art_nombre;
                    dgvDetalles.Rows[i].Cells["ped_cant"].Value = lineaPrev.ped_cant;
                    dgvDetalles.Rows[i].Cells["ped_precio"].Value = lineaPrev.ped_precio;
                    dgvDetalles.Rows[i].Cells["oferta_bonif"].Value = lineaPrev.ped_oferta_bonif;
                    dgvDetalles.Rows[i].Cells["precio_bonif"].Value = precio_bonificado;
                    dgvDetalles.Rows[i].Cells["ped_precio_total"].Value = precio_total;
                    
                    subtotal = subtotal + precio_total;
                }

                calcularTotales();

                btnDescartar.Enabled = true;
                btnEditarPedido.Enabled = true;
                btnEmitirComprobante.Enabled = true;
                numDescuento.Enabled = true;
                bttnEmitirRemito.Enabled = true;

                var tipos_factura = Funcion.obtenerTiposFactura(pedido_seleccionado.Clientes.CondicionIVA.condicion_sigla);

                if (tipos_factura.Length != 0)
                    btnEmitirFactura.Enabled = true;
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
        }

        private void calcularTotales()
        {
                descuento = numDescuento.Value / 100;

                subtotal_sin_iva = Decimal.Round(subtotal / (1 + descuento), 2); 
                //esto era antes
                //iva = Decimal.Round(subtotal_sin_iva * Clases.Constantes.IVA, 2);
                iva = 0;
                subtotal_con_iva = Decimal.Round(subtotal_sin_iva + iva, 2);

                txbSubTotal.Text = subtotal.ToString();
                txbIVA.Text = iva.ToString();
                txbTotalconIva.Text = subtotal_con_iva.ToString();
                txbTotalsinIva.Text = subtotal_sin_iva.ToString();
        }

        private void buscarFacturasSinCAE()
        {
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            //Busco las facturas sin CAE
            var FactSinCAE = from venta in context.Ventas
                             where venta.venta_estado == Clases.Estado.SinCae
                             select venta;

            dgvFacturasSinCAE.Rows.Clear();
            if (FactSinCAE != null)
            {
                foreach (var fact in FactSinCAE)
                {

                    int i = dgvFacturasSinCAE.Rows.Add();

                    dgvFacturasSinCAE.Rows[i].Cells["id"].Value = fact.id_venta;
                    dgvFacturasSinCAE.Rows[i].Cells["Tipo"].Value = fact.venta_tipo_comprobante;
                    dgvFacturasSinCAE.Rows[i].Cells["Fecha"].Value = fact.venta_fecha;
                    dgvFacturasSinCAE.Rows[i].Cells["Cliente"].Value = fact.Clientes.cliente_nombre;
                    dgvFacturasSinCAE.Rows[i].Cells["Monto"].Value = fact.venta_monto;
                }
            }
            dgvFacturasSinCAE.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvFacturasSinCAE.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

        
        
        }



        private void restaurarColoresGrilla()
        {
            foreach (DataGridViewRow fila in dgvPendientes.Rows)
            {
                if (fila.DefaultCellStyle.BackColor != SystemColors.Window)
                {
                    fila.DefaultCellStyle.BackColor = SystemColors.Window;
                    fila.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight;
                    break;
                }
            }
        }

        public void btnActualizar_Click(object sender, EventArgs e)
        {
            cargarPedidosPendientes();
            buscarFacturasSinCAE();
        }

        private void dgvPendientes_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int id = (int)dgvPendientes.CurrentRow.Cells["pedido_id"].Value;

            cargarPedidoSeleccionado(id);
        }

        private void numDescuento_ValueChanged(object sender, EventArgs e)
        {
            calcularTotales();
        }

        private void btnDescartar_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("¿Seguro que desea descartar el pedido seleccionado?", "Confirme la operación", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                context.Pedido.DeleteObject(pedido_seleccionado);
                context.SaveChanges();
                cargarPedidosPendientes();
            }
        }

        private void btnEmitirFactura_Click(object sender, EventArgs e)
        {
            FrmIncremento inc = new FrmIncremento(pedido_seleccionado.ped_id);
            inc.ShowDialog();

            cargarPedidosPendientes();
            buscarFacturasSinCAE();

            
            //frmEmitirFactura nuevaFactura = new frmEmitirFactura(pedido_seleccionado.ped_id);
           
            //DialogResult dr = nuevaFactura.ShowDialog();

            //if (dr == System.Windows.Forms.DialogResult.OK)
            //    cargarPedidosPendientes();
        }

        private void btnEditarPedido_Click(object sender, EventArgs e)
        {
            frmAgregarEditarPedido ped = new frmAgregarEditarPedido(pedido_seleccionado.ped_id);
            ped.ShowDialog();

            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            cargarPedidoSeleccionado(pedido_seleccionado.ped_id);
            
            //Se actualizan los campos Nombre del cliente y Monto, en la lista de pedidos pendientes
            foreach (DataGridViewRow fila in dgvPendientes.Rows)
            {
                if ((int)fila.Cells["pedido_id"].Value == pedido_seleccionado.ped_id)
                {
                    fila.Cells["pedido_cliente"].Value = pedido_seleccionado.Clientes.cliente_nombre;
                    fila.Cells["pedido_monto"].Value = subtotal;
                    break;
                }
            }
        }

        private void btnEmitirComprobante_Click(object sender, EventArgs e)
        {
            FrmIncrementoX incx = new FrmIncrementoX(pedido_seleccionado.ped_id);
            incx.ShowDialog();

            //FrmEmitirComprobanteX comprobantex = new FrmEmitirComprobanteX(pedido_seleccionado.ped_id);

            //DialogResult dr = comprobantex.ShowDialog();

            //if (dr == System.Windows.Forms.DialogResult.OK)
                cargarPedidosPendientes();
        }
        
        private void tsbAgregarPedido_Click(object sender, EventArgs e)
        {
            frmAgregarEditarPedido ped = new frmAgregarEditarPedido();
            ped.ShowDialog();

            cargarPedidosPendientes();
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            EmitiRemito emitirremito = new EmitiRemito(pedido_seleccionado.ped_id);
            emitirremito.ShowDialog();
            cargarPedidosPendientes();
            
        }

        private void bttnFacturarCae_Click(object sender, EventArgs e)
        {
            Forms.GestionPedidos.FrmFacturaCae FacturaCae = new Forms.GestionPedidos.FrmFacturaCae(idventasincae);
            FacturaCae.ShowDialog();
            buscarFacturasSinCAE();
        }

        private void dgvFacturasSinCAE_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            idventasincae = (int)dgvFacturasSinCAE.CurrentRow.Cells["id"].Value;
            bttnFacturarCae.Enabled = true;
            dgvFacturasSinCAE.CurrentRow.DefaultCellStyle.BackColor = Color.Green;
            dgvFacturasSinCAE.CurrentRow.DefaultCellStyle.SelectionBackColor = Color.DarkGreen;

        }

       

      


     
    }
}
